Conditional Types
https://www.typescriptlang.org/ja/play?ssl=1&ssc=21&pln=1&pc=4#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-MAR-V-qswADaZmAyIASE0xrFABC1EYLRACHDIAfoZdK4TRrwfIVz1pDgAOLjk8d4yx6BSzoNYqmDBHE4WJTSY29s9ZuzWxwAAbQALqpWTKxO1ytDGCUHZQ3FgByTQsPIkgRkQBzAthUypJBmDH2UIANeUnjFsQKWsx5bSzFAyCm2E8w4TXEABty+pJSynlI0NW8w507xuPcJdY1XhfOeKCBVgBYqOhDzUApQzCvqcPnJZqjlCAGFFHlYAj2GL3SMaNGQs0GWsDe0Ac74SACwEwAcglDPRIuxgt8SBCoviEFpf0j3dRGPUSQkFAOgchhGJDFwC21lsagrd0AmwbrYzuggDEXKQGPCxk4VMnz9E+WNeozwYOAEGGCUShEQhCFJZayLRABwch+aOIRdK9QsBYEBhEsq2IOqmTjJjt2+KZomKmQA